package com.mingqijia.gassafety.webserver.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.mingqijia.gassafety.db.entity.Consumer;
import com.mingqijia.gassafety.db.entity.ConsumerLocation;
import com.mingqijia.gassafety.db.entity.Dtu;
import com.mingqijia.gassafety.webserver.dto.AdInfoDTO;
import com.mingqijia.gassafety.webserver.request.ConsumerBatchAllocationAreaReq;
import com.mingqijia.gassafety.webserver.request.ConsumerFuncAreaRequest;
import com.mingqijia.gassafety.webserver.request.ConsumerMapGroupRequest;
import com.mingqijia.gassafety.webserver.request.ConsumerMapRequest;
import com.mingqijia.gassafety.webserver.response.ConsumerFuncAreaResponse;
import com.mingqijia.gassafety.webserver.response.ConsumerMapGroupResponse;
import com.mingqijia.gassafety.webserver.response.ConsumerMapResponse;
import com.mingqijia.gassafety.webserver.response.ConsumerMapWitchKitchenResponse;

import java.util.List;
import java.util.Map;

/**
 * 用户地图信息表
 * @Author: duanhongxiang
 * @Date: 2024/4/26 15:21
 */
public interface ConsumerLocationService extends IService<ConsumerLocation> {

    /**
     * 按组展示用户数量列表
     * @param request
     * @return
     */
    ConsumerMapGroupResponse queryCustMapGroupList(ConsumerMapGroupRequest request);

    /**
     * 查询boundary
     * @param request
     * @return
     */
    ConsumerMapResponse queryBoundaryCustList(ConsumerMapRequest request);

    /**
     * 同步更新客户地理位置信息
     * @param consumer
     */
    void updateConsumerLocation(Consumer consumer);

    /**
     * 同步删除客户信息
     * @param spId
     * @param consumerId
     */
    void deleteConsumerLocation(String spId, Integer consumerId);
    
    /**
     * 更新设备的数量
     * @param spId
     * @param consumerId
     */
    void updateConsumerLocationDeviceNum(String spId,Integer consumerId);

    /**
     * 根据设备id更新设备数量
     * @param spId
     * @param deviceId
     */
    void updateConsumerLocationDeviceNumByDeviceId(String spId,String deviceId);


    /**
     * 更新设备数量
     * @param dtu
     */
    void updateConsumerLocationDeviceNumByDtu(Dtu dtu);


    /**
     * 根据imei更新设备数量
     * @param spId
     * @param imei
     */
    void updateConsumerLocationDeviceNumByImei(String spId,String imei);

    List<Double> selectAlertPosition();

    /**
     * 获取地图汇总数据（包含智慧厨房）
     * @param request
     * @return
     */
    ConsumerMapGroupResponse queryCustMapGroupListWithKitchen(ConsumerMapGroupRequest request);

    /**
     * 查询电子围栏里面的数据
     * @param request
     * @return
     */
    ConsumerMapWitchKitchenResponse queryBoundaryCustListWithKitchen(ConsumerMapRequest request);

    /**
     * 获取告警数据的经纬度
     * @return
     */
    List<Double> selectAlertPositionWithKitchen();

    /**
     * 更新自定义功能区
     * @param consumer
     * @param funcAreaRequest
     */
    void updateConsumerLocationCustom(Consumer consumer, ConsumerFuncAreaRequest funcAreaRequest);

    /**
     * 获取客户的功能区信息
     * @param consumerIds
     * @param spId
     * @return
     */
    Map<Integer,ConsumerFuncAreaResponse> getConsumerFuncArea(List<Integer> consumerIds,String spId, Integer funcAreaAllocat);

    /**
     * 获取城市数据
     * @param adCode
     * @return
     */
    Map<String, AdInfoDTO> getCityAdInfo(String adCode);

    /**
     * 客户管理批量分配区域
     * @return
     */
    void batchAllocationArea(ConsumerBatchAllocationAreaReq areaReq);

    /**
     * 同步客户位置表中的坐标
     */
    void syncConsumerLocation();

    /**
     * 同步客户位置表中的坐标
     */
    void syncConsumerLocationCode();

    /**
     * 根据省，市名称获取城市编码
     * @param provinceName
     * @param cityName
     * @param cityLevel
     * @return
     */
    String getCityCodeByCityName(String provinceName,String cityName, int cityLevel);
}
